/*************************************************************
 * @file                   simple_memory.c        
 * @brief
 *
 *
 * @version   Version
 * @author    SealedGhost
 * @data
 *************************************************************/
	
	
	#include "simple_memory.h"
	
	/** @addtogroup                 内存工具
 *   
 *   @{
 */


/**@brief  在给定的内存中分配一个未使用的元素
  * 
  * @param buf          分配元素所使用的内存区域
		* @param element_max  所用内存区域所能容纳的最大元素个数
		* @param element_size 每个元素的内存大小
		* @param ref_offset   用于判定某位置元素未使用的参考指针偏移量
  * @return void    
  * @note
  */
	void* Alloc(void* buf, size_t element_max, size_t element_size, size_t ref_offset)
	{
		  int i  = 0;
		  uintptr_t p  = 0;
		  for(; i < element_max; i++){
					 //p  = &((uint8_t*))buf[element_size * i + ref_offset];
				  p  = (uintptr_t)buf  + element_size*i + ref_offset;
					
					 if( (* (uintptr_t*)p)  == 0){
							 return (void*)((uintptr_t)buf  + element_size*i);
						}
				}
	
				
				return 0;
	}



/** @} */
	
	
	